<html>
<head>
  <title>Git and Github</title>
  <basefont face="微软雅黑" size="2" />
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  <meta name="exporter-version" content="Evernote Windows/307027 (zh-CN, DDL); Windows/6.1.0 (Win32);"/>
  <style>
    body, td {
      font-family: 微软雅黑;
      font-size: 10pt;
    }
  </style>
</head>
<body>
<a name="982"/>
<h1>Git and Github</h1>

<div>
<span><div><div>Git教程：</div><div><div>    </div><h4>创建版本库</h4><div>         版本库又名仓库，英文名<span style="font-weight: bold;">repository</span>，你可以简单理解成一个目录，这个目录里面的所有文件都可以被Git管理起来，每个文件的修改、删除，Git都能跟踪，以便任何时刻都可以追踪历史，或者在将来某个时刻可以“还原”。</div><ol><li>首先，选择一个合适的地方，创建一个空目录。</li><li>第二步，通过git init命令把这个目录变成Git可以管理的仓库。</li></ol><div>       </div><div><span style="font-weight: bold;">把文件添加到版本库</span></div><div><div><span style="font-weight: bold;">    </span> 所有的版本控制系统，其实只能跟踪文本文件的改动，比如TXT文件，网页，所有的程序代码等等，Git也不例外。版本控制系统可以告诉你每次的改动，比如在第5行加了一个单词“Linux”，在第8行删了一个单词“Windows”。而图片、视频这些二进制文件，虽然也能由版本控制系统管理，但没法跟踪文件的变化，只能把二进制文件每次改动串起来，也就是只知道图片从100KB改成了120KB，但到底改了啥，版本控制系统不知道，也没法知道。</div><div style="margin-top: 1em; margin-bottom: 1em;">     不幸的是，Microsoft的Word格式是二进制格式，因此，版本控制系统是没法跟踪Word文件的改动的，前面我们举的例子只是为了演示，如果要真正使用版本控制系统，就要以纯文本方式编写文件。</div><div>因为文本是有编码的，比如中文有常用的GBK编码，日文有Shift_JIS编码，如果没有历史遗留问题，强烈建议使用标准的UTF-8编码，所有语言使用同一种编码，既没有冲突，又被所有平台所支持。</div><ol><li>第一步，用命令git add告诉Git，把文件添加到仓库</li><li>第二步，用命令git commit告诉Git，把文件提交到仓库</li></ol><div><br clear="none"/></div><div><h4><span style="font-size: 24px; color: rgb(0, 0, 255);">时光机穿梭</span></h4><div><br clear="none"/></div></div><ul><li>要随时掌握工作区的状态，使用git status命令。</li><li>如果git status告诉你有文件被修改过，用git diff可以查看修改内容。</li></ul><div><br clear="none"/></div><div><h4>版本回退</h4><div>     Git也是一样，每当你觉得文件修改到一定程度的时候，就可以“保存一个快照”，这个快照在Git中被称为commit。一旦你把文件改乱了，或者误删了文件，还可以从最近的一个commit恢复，然后继续工作，而不是把几个月的工作成果全部丢失。</div></div><div>     版本控制系统肯定有某个命令可以告诉我们历史记录，在Git中，我们用git log命令查看.</div><ul><li>     git log命令显示从最近到最远的提交日志.</li></ul><div><ul><li>使用git reset命令:首先，Git必须知道当前版本是哪个版本，在Git中，用HEAD表示当前版本，也就是最新的提交3628164...882e1e0（注意我的提交ID和你的肯定不一样），上一个版本就是HEAD^，上上一个版本就是HEAD^^，当然往上100个版本写100个^比较容易数不过来，所以写成HEAD~100。<span style="font-weight: bold; color: rgb(0, 0, 128);">$ git reset --hard HEAD^</span><br/><span style="font-weight: bold; color: rgb(0, 0, 128);">HEAD is now at ea34578 add distributed</span><br/><br clear="none"/></li><li><span style="color: rgb(0, 0, 0);">可以指定回到未来的某个版本：</span><span style="font-weight: bold;">$ git reset --hard 3628164</span><br/><span style="font-weight: bold;">HEAD is now at 3628164 append GPL</span><br/><br/><span style="color: rgb(0, 0, 0);">版本号没必要写全，前几位就可以了，Git会自动去找。当然也不能只写前一两位，因为Git可能会找到多个版本号，就无法确定是哪一个了。</span></li><li><span style="color: rgb(0, 0, 0);">Git提供了一个命令</span><span style="color: rgb(0, 0, 0);">git reflog</span><span style="color: rgb(0, 0, 0);">用来记录你的每一次命令</span></li></ul><div><br clear="none"/></div><h4>工作区和暂存区</h4><div><img src="Git and Github_files/Image.png" type="image/png" data-filename="Image.png"/></div><div><ul><li>工作区（Working Directory）:就是你在电脑里能看到的目录，比如我的learngit文件夹就是一个工作区</li><li>版本库（Repository）:工作区有一个隐藏目录.git，这个不算工作区，而是Git的版本库。Git的版本库里存了很多东西，其中最重要的就是称为stage（或者叫index）的暂存区，还有Git为我们自动创建的第一个分支master，以及指向master的一个指针叫HEAD</li></ul><div><br clear="none"/></div><div><span style="font-weight: bold;">GIT修改</span></div><ul><li><span style="font-weight: bold;">Git会告诉你，</span><span style="font-weight: bold;">git checkout -- file</span>可以丢弃工作区的修改</li><li><span style="font-weight: bold;">用命令</span><span style="font-weight: bold;">git reset HEAD file</span>可以把暂存区的修改撤销掉（unstage），重新放回工作区</li><li><span style="font-weight: bold;">一旦你把“stupid boss”提交推送到远程版本库，你就真的惨了……</span></li><li><span style="font-weight: bold;">一是确实要从版本库中删除该文件，那就用命令</span><span style="font-weight: bold;">git rm</span>删掉，并且git commit</li><li><span style="font-weight: bold;">一种情况是删错了，因为版本库里还有呢，所以可以很轻松地把误删的文件恢复到最新版本：</span><span style="font-weight: bold;">git checkout</span>其实是用版本库里的版本替换工作区的版本，无论工作区是修改还是删除，都可以“一键还原”。</li></ul><div><br clear="none"/></div></div><h4><span style="font-size: 24px; color: rgb(0, 0, 255);">远程仓库</span></h4><div><font color="#AD0000" style="font-size: 12pt;"><span style="color: rgb(173, 0, 0); font-size: 12pt; font-weight: bold;">向我的github中的项目push新的内容</span></font></div></div><div><ul><li><font color="#AD0000" style="font-size: 12pt;"><span style="color: rgb(173, 0, 0); font-size: 12pt; font-weight: bold;">将本地与github通过ssh关联起来</span><a href="http://stormzhang.com/github/2016/06/04/learn-github-from-zero4/" style="font-size: 12pt; font-weight: bold; color: rgb(227, 0, 0);">http://stormzhang.com/github/2016/06/04/learn-github-from-zero4/</a></font></li><li><font color="#AD0000" style="font-size: 12pt;"><span style="color: rgb(173, 0, 0); font-size: 12pt; font-weight: bold;">将个人项目通过git clone到本地</span></font></li><li><font color="#AD0000" style="font-size: 12pt;"><span style="color: rgb(173, 0, 0); font-size: 12pt; font-weight: bold;">在本地命令行中建立新的branch</span></font></li><li><font color="#AD0000" style="font-size: 12pt;"><span style="color: rgb(173, 0, 0); font-size: 12pt; font-weight: bold;">修改相关文件，add,commit,checkout,diff,merge</span></font></li><li><font color="#AD0000" style="font-size: 12pt;"><span style="color: rgb(173, 0, 0); font-size: 12pt; font-weight: bold;">git push</span></font></li></ul><div><a href="http://www.jianshu.com/p/c67080f51452" style="color: rgb(173, 0, 0); font-size: 12pt; font-weight: bold;"><font color="#AD0000" style="font-size: 12pt;">http://www.jianshu.com/p/c67080f51452</font></a></div></div><div><br/></div><div><font style="font-size: 14pt;"><span style="color: rgb(28, 51, 135); font-size: 14pt; font-weight: bold;">在github上查看以及merge</span></font></div><div style="box-sizing: border-box; padding: 8px; font-size: 12px; border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902);"><div><a href="https://git-scm.com/book/zh/v2/GitHub-%E5%AF%B9%E9%A1%B9%E7%9B%AE%E5%81%9A%E5%87%BA%E8%B4%A1%E7%8C%AE" style="background-color: rgb(251, 250, 248); font-family: Monaco, Menlo, Consolas, 'Courier New', monospace; font-size: 12px; color: rgb(0, 0, 238); text-decoration: underline;">https://git-scm.com/book/zh/v2/GitHub-%E5%AF%B9%E9%A1%B9%E7%9B%AE%E5%81%9A%E5%87%BA%E8%B4%A1%E7%8C%AE</a></div></div></div></div><div><br/></div><div>这就是大部分 GitHub 项目使用的工作流程。创建分支，基于分支创建合并请求，进行讨论，根据需要继续在分支上进行修改，最终关闭或合并合并请求。</div><table><colgroup><col></col><col></col></colgroup><tbody><tr><td><div>Note</div></td><td><div>不必总是 Fork</div></td></tr></tbody></table><div><br/></div><div><span style="font-weight: bold; color: rgb(173, 0, 0); font-size: 24pt;">将整个项目搬运到github上：</span></div><div><br/></div><div><br/></div><div><ul><li><span style="color: rgb(227, 0, 0); font-size: 10pt;">在github上新建一个repository,确定一个合适的名字</span></li><li><span style="color: rgb(227, 0, 0); font-size: 10pt;">将项目所在文件夹转化为本地仓库，进入相关文件夹运用git init命令</span></li><li><span style="color: rgb(227, 0, 0); font-size: 10pt;">给本地仓库添加一个可用github远程仓库，</span><span style="color: rgb(227, 0, 0); font-size: 10pt; background-color: rgb(240, 240, 240); border: 0px; overflow-x: auto; white-space: pre-wrap; background-position: initial initial; background-repeat: initial initial;">$ git remote add origin</span> <a href="mailto:git@github.com" style="font-size: 10pt; background-color: rgb(240, 240, 240); color: rgb(227, 0, 0);">git@github.com</a><span style="color: rgb(227, 0, 0); font-size: 10pt; background-color: rgb(240, 240, 240); border: 0px; overflow-x: auto; white-space: pre-wrap; background-position: initial initial; background-repeat: initial initial;">:yourName/yourRepo.git</span></li></ul></div><div><br/></div><div><ul><li><span style="color: rgb(227, 0, 0); font-size: 10pt;">提交上传：git add .   /   git commit -m &quot; &quot;</span></li><li><span style="color: rgb(227, 0, 0); font-size: 10pt;">上传到github</span><span style="border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240); color: rgb(227, 0, 0); font-size: 10pt;">$ git push origin master</span><br/><font color="#E30000" style="font-size: 10pt;"><span style="border: 0px; color: rgb(227, 0, 0); font-size: 10pt; line-height: 1.6em;">git push命令会将本地仓库推送到远程服务器。</span><span style="color: rgb(227, 0, 0); font-size: 10pt; line-height: 1.6em;">git pull命令则相反。</span></font></li></ul><div><span style="line-height: 20.796875px; color: rgb(227, 0, 0); font-size: 10pt;">          有时出现branch behind，要先git pull origin master --allow-unrelated-histories</span></div><div><br/></div><div><span style="font-size: 16pt; color: rgb(28, 51, 135); line-height: 1.2em;">gitignore文件</span></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px; line-height: 1.6em;"></div><div><span style="border: 0px; line-height: 1.6em;">.gitignore顾名思义就是告诉git需要忽略的文件，这是一个很重要并且很实用的文件。一般我们写完代码后会执行编译、调试等操作，这期间会产生很多中间文件和可执行文件，这些都不是代码文件，是不需要git来管理的。我们在git status的时候会看到很多这样的文件，如果用git add -A来添加的话会把他们都加进去，而手动一个个添加的话也太麻烦了。这时我们就需要.gitignore了。</span></div><div><br/></div><div><br/></div><div><font style="font-size: 24pt;"><span style="color: rgb(173, 0, 0); font-size: 24pt; font-weight: bold;">删除误上传的文件</span></font></div><div><span style="font-weight: bold; color: rgb(227, 0, 0); font-size: 16pt;">这样合理：</span></div><div><span style="font-weight: bold; color: rgb(227, 0, 0); font-size: 16pt;">git rm -r --cached some-directory</span></div><div><span style="font-weight: bold; color: rgb(227, 0, 0); font-size: 16pt;">git commit -m &quot;Remove the now ignored directory some-directory&quot;</span></div><div><span style="font-weight: bold; color: rgb(227, 0, 0); font-size: 16pt;">最后push~</span></div><div><span style="font-weight: bold; color: rgb(227, 0, 0); font-size: 16pt;">（只会删除github远程上的文件，本地的仍然保留）</span></div><div><br/></div><div><br/></div><h2 style="margin-top: 20px; margin-bottom: 20px; padding: 0px; border: 0px;"><span style="border: 0px;"><span style="line-height: 1.2em; font-size: 24pt;">Git命令</span></span></h2><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px; line-height: 1.6em;"></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><span style="border: 0px; line-height: 1.6em;">查看、添加、提交、删除、找回，重置修改文件</span></div><div style="overflow: auto; padding: 0px; margin-top: 0px; margin-bottom: 10px; word-break: break-all; word-wrap: break-word; border: 0px; background-color: rgb(245, 245, 245);"><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">help</span> <span style="background-color: rgb(240, 240, 240); color: black;">&lt;</span><span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">command</span><span style="background-color: rgb(240, 240, 240); color: black;">&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 显示command的help</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git show</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 显示某次提交的内容 git show $id</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git co -- &lt;file&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 抛弃工作区修改</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git co .</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 抛弃工作区修改</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git add &lt;file&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 将工作文件修改提交到本地暂存区</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git add .</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 将所有修改过的工作文件提交暂存区</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git rm &lt;file&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 从版本库中删除文件</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git rm &lt;file&gt; --cached</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 从版本库中删除文件，但不删除文件</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git reset &lt;file&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 从暂存区恢复到工作文件</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git reset -- .</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 从暂存区恢复到工作文件</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git reset --hard</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 恢复最近一次提交过的状态，即放弃上次提交后的所有本次修改</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git ci &lt;file&gt; git ci . git ci</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black;">-a</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 将git add, git rm和git ci等操作都合并在一起做　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　git ci -am &quot;some comments&quot;</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git ci --amend</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 修改最后一次提交记录</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git revert &lt;</span><span style="border: 0px; background-color: rgb(240, 240, 240); color: black;">$id</span><span style="background-color: rgb(240, 240, 240); color: black;">&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 恢复某次提交的状态，恢复动作本身也创建次提交对象</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git revert HEAD</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 恢复最后一次提交的状态</span></div></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><div><br/></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="border: 0px; line-height: 1.6em;">查看文件diff</span></div></div><div style="overflow: auto; padding: 0px; margin-top: 0px; margin-bottom: 10px; word-break: break-all; word-wrap: break-word; border: 0px; background-color: rgb(245, 245, 245);"><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git diff &lt;file&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 比较当前文件和暂存区文件差异 git diff</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git diff &lt;id1&gt;&lt;id2&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 比较两次提交之间的差异</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git diff &lt;branch1&gt;..&lt;branch2&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 在两个分支之间比较</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git diff --staged</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 比较暂存区和版本库差异</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git diff --cached</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 比较暂存区和版本库差异</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git diff --stat</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 仅仅比较统计信息</span></div></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><div><br/></div><div><br/></div><div><br/></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="border: 0px; line-height: 1.6em;">查看提交记录</span></div></div><div style="overflow: auto; padding: 0px; margin-top: 0px; margin-bottom: 10px; word-break: break-all; word-wrap: break-word; border: 0px; background-color: rgb(245, 245, 245);"><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">log</span> <span style="background-color: rgb(240, 240, 240); color: black;">git</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">log</span> <span style="background-color: rgb(240, 240, 240); color: black;">&lt;file&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 查看该文件每次提交记录</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">log</span> <span style="background-color: rgb(240, 240, 240); color: black;">-p &lt;file&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 查看每次详细修改内容的diff</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">log</span> <span style="background-color: rgb(240, 240, 240); color: black;">-p -</span><span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(0, 136, 0);">2</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 查看最近两次详细修改内容的diff</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">log</span> <span style="background-color: rgb(240, 240, 240); color: black;">--stat</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);">#查看提交统计信息</span></div></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><div><br/></div><div><span style="border: 0px; line-height: 1.6em;">tig</span></div><div><span style="border: 0px; line-height: 1.6em; color: rgb(255, 0, 0);">Mac上可以使用tig代替diff和log，brew install tig</span></div><div><br/></div><div><br/></div><div><span style="border: 0px; line-height: 1.6em;">Git 本地分支管理</span></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="border: 0px; line-height: 1.6em;">查看、切换、创建和删除分支</span></div></div><div style="overflow: auto; padding: 0px; margin-top: 0px; margin-bottom: 10px; word-break: break-all; word-wrap: break-word; border: 0px; background-color: rgb(245, 245, 245);"><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git br -r</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 查看远程分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git br &lt;new_branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 创建新的分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git br -v</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 查看各个分支最后提交信息</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git br --merged</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 查看已经被合并到当前分支的分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git br --no-merged</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 查看尚未被合并到当前分支的分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git co &lt;branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 切换到某个分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git co -b &lt;new_branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 创建新的分支，并且切换过去</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git co -b &lt;new_branch&gt; &lt;branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 基于branch创建新的new_branch</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git co</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black;">$id</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 把某次历史提交记录checkout出来，但无分支信息，切换到其他分支会自动删除</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git co</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black;">$id</span> <span style="background-color: rgb(240, 240, 240); color: black;">-b &lt;new_branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 把某次历史提交记录checkout出来，创建成一个分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git br</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black;">-d</span> <span style="background-color: rgb(240, 240, 240); color: black;">&lt;branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 删除某个分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git br -D &lt;branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 强制删除某个分支 (未被合并的分支被删除的时候需要强制)</span></div></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><div><br/></div><div><br/></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="border: 0px; line-height: 1.6em;"> 分支合并和rebase</span></div></div><div style="overflow: auto; padding: 0px; margin-top: 0px; margin-bottom: 10px; word-break: break-all; word-wrap: break-word; border: 0px; background-color: rgb(245, 245, 245);"><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git merge &lt;branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 将branch分支合并到当前分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git merge origin/master --no-ff</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 不要Fast-Foward合并，这样可以生成merge提交</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git rebase master &lt;branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 将master rebase到branch，相当于： git co &lt;branch&gt; &amp;&amp; git rebase master &amp;&amp; git co master &amp;&amp; git merge &lt;branch&gt;</span></div></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><div><br/></div><div><br/></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="border: 0px; line-height: 1.6em;"> Git补丁管理(方便在多台机器上开发同步时用)</span></div></div><div style="overflow: auto; padding: 0px; margin-top: 0px; margin-bottom: 10px; word-break: break-all; word-wrap: break-word; border: 0px; background-color: rgb(245, 245, 245);"><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git diff &gt; ../sync.patch</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 生成补丁</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git apply ../sync.patch</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 打补丁</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git apply --check ../sync.patch</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);">#测试补丁能否成功</span></div></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><div><br/></div><div><br/></div><div><br/></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="border: 0px; line-height: 1.6em;"> Git暂存管理</span></div></div><div style="overflow: auto; padding: 0px; margin-top: 0px; margin-bottom: 10px; word-break: break-all; word-wrap: break-word; border: 0px; background-color: rgb(245, 245, 245);"><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git stash</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 暂存</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git stash list</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 列所有stash</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git stash apply</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 恢复暂存的内容</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git stash drop</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 删除暂存区</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">Git远程分支管理</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git pull</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 抓取远程仓库所有分支更新并合并到本地</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git pull --no-ff</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 抓取远程仓库所有分支更新并合并到本地，不要快进合并</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git fetch origin</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 抓取远程仓库更新</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git merge origin/master</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 将远程主分支合并到本地当前分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git co --track origin/branch</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 跟踪某个远程分支创建相应的本地分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git co -b &lt;</span><span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">local</span><span style="background-color: rgb(240, 240, 240); color: black;">_branch&gt; origin/&lt;remote_branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 基于远程分支创建本地分支，功能同上</span></div></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><div><br/></div><div><br/></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="border: 0px; line-height: 1.6em;">git push # push所有分支</span></div></div><div style="overflow: auto; padding: 0px; margin-top: 0px; margin-bottom: 10px; word-break: break-all; word-wrap: break-word; border: 0px; background-color: rgb(245, 245, 245);"><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git push origin master</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 将本地主分支推到远程主分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git push -u origin master</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 将本地主分支推到远程(如无远程主分支则创建，用于初始化远程仓库)</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git push origin &lt;</span><span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">local</span><span style="background-color: rgb(240, 240, 240); color: black;">_branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 创建远程分支， origin是远程仓库名</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git push origin &lt;</span><span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">local</span><span style="background-color: rgb(240, 240, 240); color: black;">_branch&gt;:&lt;remote_branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 创建远程分支</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git push origin :&lt;remote_branch&gt;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);">#先删除本地分支(git br -d &lt;branch&gt;)，然后再push删除远程分支</span></div></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><div><br/></div><div><br/></div><div><br/></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="border: 0px; line-height: 1.6em;">Git远程仓库管理</span></div></div><div style="overflow: auto; padding: 0px; margin-top: 0px; margin-bottom: 10px; word-break: break-all; word-wrap: break-word; border: 0px; background-color: rgb(245, 245, 245);"><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git remote -v</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 查看远程服务器地址和仓库名称</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git remote show origin</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 查看远程服务器仓库状态</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git remote add origin git@ github:robbin/robbin_site.git</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 添加远程仓库地址</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git remote</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">set</span><span style="background-color: rgb(240, 240, 240); color: black;">-url origin git@</span> <a href="http://github.com:robbin/robbin_site.git" style="background-color: rgb(240, 240, 240);">github.com:robbin/robbin_site.git</a><span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 设置远程仓库地址(用于修改远程仓库地址) git remote rm &lt;repository&gt; # 删除远程仓库</span></div></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><div><br/></div><div><br/></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="border: 0px; line-height: 1.6em;">创建远程仓库</span></div></div><div style="overflow: auto; padding: 0px; margin-top: 0px; margin-bottom: 10px; word-break: break-all; word-wrap: break-word; border: 0px; background-color: rgb(245, 245, 245);"><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">clone</span> <span style="background-color: rgb(240, 240, 240); color: black;">--bare robbin_site robbin_site.git</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 用带版本的项目创建纯版本仓库</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">scp -r my_project.git git@</span> <a href="http://git.csdn.net:~/" style="background-color: rgb(240, 240, 240);">git.csdn.net:~</a><span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 将纯仓库上传到服务器上</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">mkdir robbin_site.git &amp;&amp;</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">cd</span> <span style="background-color: rgb(240, 240, 240); color: black;">robbin_site.git &amp;&amp; git --bare init</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 在服务器创建纯仓库</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git remote add origin git@</span> <a href="http://github.com:robbin/robbin_site.git" style="background-color: rgb(240, 240, 240);">github.com:robbin/robbin_site.git</a><span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 设置远程仓库地址</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git push -u origin master</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 客户端首次提交</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git push -u origin develop</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 首次将本地develop分支提交到远程develop分支，并且track</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git remote</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: black; font-weight: bold;">set</span><span style="background-color: rgb(240, 240, 240); color: black;">-head origin master</span> <span style="border: 0px; background-color: rgb(240, 240, 240); color: rgb(136, 136, 136);"># 设置远程仓库的HEAD指向master分支</span></div></div></div><div style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px; border: 0px;"><div><br/></div><div><br/></div><div><br/></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="border: 0px; line-height: 1.6em;">也可以命令设置跟踪远程库和本地库</span></div></div><div style="padding: 0.5em; border: 0px; white-space: pre-wrap; overflow-x: auto; background-color: rgb(240, 240, 240);"><div><span style="background-color: rgb(240, 240, 240); color: black;">git branch --set-upstream master origin/master</span></div><div><br/></div><div><span style="background-color: rgb(240, 240, 240); color: black;">git branch --set-upstream develop origin/develop</span></div></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div><div><br/></div></div><div><br/></div><div><br/></div></span>
</div></body></html> 